package com.ktg.mes.wm.service;

import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ktg.common.core.domain.Result;
import com.ktg.mes.pro.domain.ProItemNeed;
import com.ktg.mes.pro.domain.ProWorkorder;
import com.ktg.mes.util.LService;;
import com.ktg.mes.wm.domain.WmStockWillOut;
import com.ktg.mes.wm.domain.WmStockWillSelectParam;
import org.apache.ibatis.annotations.Param;

/**
 * 产品出库记录Service接口
 *
 * @author byteco
 * @date 2022-12-15
 */
public interface IWmStockWillOutService extends LService<WmStockWillOut>
{
    /**
     * 查询产品出库记录
     *
     * @param id 产品出库记录主键
     * @return 产品出库记录
     */
    public WmStockWillOut getInfo(Long id);

    /**
     * 查询产品出库记录列表
     *
     * @param entity 产品出库记录
     * @param page 分页对象
     * @return 产品出库记录集合
     */
    public IPage<WmStockWillOut> queryPageList(WmStockWillOut entity, Page<WmStockWillOut> page);

    /**
     * 查询产品出库记录
     *
     * @param entity 产品出库记录
     * @return 产品出库记录
     */
    public List<WmStockWillOut> queryList(WmStockWillOut entity);

    /**
     * 新增产品出库记录
     *
     * @param entity 产品出库记录
     * @return 结果
     */
    public void insert(WmStockWillOut entity);

    /**
     * 修改产品出库记录
     *
     * @param entity 产品出库记录
     * @return 结果
     */
    public boolean update(WmStockWillOut entity);

    /**
     * 批量删除产品出库记录
     *
     * @param recordIds 需要删除的产品出库记录主键集合
     * @return 结果
     */
    public boolean delete(Long[] recordIds);

    /**
     * 删除产品出库记录信息
     *
     * @param recordId 产品出库记录主键
     * @return 结果
     */
    public boolean delete(Long recordId);

    /**
     * 使用leftJion 链接查询预出库数量
     * @param stockWillSelectParam
     * @return
     */
    public List<Map> selectLeftJoinStockWillOut(WmStockWillSelectParam stockWillSelectParam);


    /**
     * 查询此统计分类的库存信息，同时带出预出库数量
     * @param names
     * @param proItemNeedId
     * @return
     */
    List<Map> materStockWithWillOut(String names,String proItemNeedId,long itemId);

    List<Map> materStockWithWillOutWithTp(String names,String proItemNeedId);



    /**
     * 查询此统计分类的库存信息，同时带出预出库数量
     * @param names
     * @param proItemNeedId
     * @return
     */
    List<Map> materStockWithWillOut2(String names,String likeName);



    /**
     * 查询此统计分类的生产工单，同时带出排产日期和预出库数量
     * @param names
     * @param proItemNeedId
     * @return
     */
    List<Map> prokorderWithWillOut(String names,String proItemNeedId);

    List<Map> prokorderWithWillOutWithTp(String names,String proItemNeedId);


    /**
     * 根据库存信息，按统计分类统计预出库数量
     * @param names
     * @param proItemNeedId
     * @return
     */
    List<Map> materStockAllWillOut(String names,String proItemNeedId);

    List<Map> materStockAllWillOutWithTp(String names,String proItemNeedId);

    /**
     * 根据工单信息，按统计分类统计预出库数量
     * @param names
     * @param proItemNeedId
     * @return
     */
    List<Map> prokorderAllWillOut(String names,String proItemNeedId);

    List<Map> prokorderAllWillOutWithTp(String names,String proItemNeedId);

    /**
     * 查询需要此统计分类的其他客户需求记录
     * @param names
     * @return
     */
    List<ProItemNeed> relationProItemNeed(String names, String recordId);


    List<ProItemNeed> relationProItemNeedWithTp(String names, String recordId);


    /**
     * 查询生产工单预出库数量大于排产数量的记录
     * @return
     */
    List<Map> inventoryWarning();

    /**
     * 获取预出库数量的状态  code： -1 代表预出数量大于需求数量，0 代表刚刚好 ， 1 代表还欠缺一些预出库数量
     * @param needItemId
     * @param needLinkId
     * @param addStockType
     * @param addStockId
     * @param addCount
     * @return
     */
    public Result isWillOutStatus(Long needItemId,String needLinkId,String addStockType,String addStockId,float addCount);

}
